package com.fbs.wowo.finance.util;

import java.text.DecimalFormat;
import java.util.Date;
import java.util.Random;

public class OrderGenUtils {
    private static final String prefix = "xi";


    // 订单状态
    public enum OrderStatus {
        NOTPAY,     // 未支付
        CLOSED,     // 关闭交易
        PAYERROR,   // 支付错误
        SUCCESS,    // 支付成功
        REFUND;     // 退款
    }

    // 商品分类
    public static final byte PCT_ARTICLE = 1;    // 文章 图文
    public static final byte PCT_AUDIO = 2;      // 音频
    public static final byte PCT_ALBUM = 3;      // 专辑
    public static final byte PCT_LIVE = 4;       // 直播
    public enum ProductCategory {
        ARTICLE((byte) 1, "a"),    // 文章 图文
        AUDIO((byte) 2, "b"),      // 音频
        ALBUM((byte) 3, "c"),      // 专辑
        LIVE((byte) 4, "d");       // 直播

        private final byte key;
        private final String value;

        ProductCategory(byte key, String value) {
            this.key = key;
            this.value = value;
        }

        public static String getValue(byte key) {
            for (ProductCategory c : ProductCategory.values()) {
                if (c.getKey() == key) {
                    return c.value;
                }
            }
            return null;
        }

        public byte getKey() {
            return key;
        }

        public String getValue() {
            return value;
        }
    }

    // 商品类型
    public enum ProductType {
        REWARD((byte) 1, "a"),      // 赏
        BUY((byte) 2, "b");         // 购买浏览权限

        private final byte key;
        private final String value;

        ProductType(byte key, String value) {
            this.key = key;
            this.value = value;
        }

        public static String getValue(byte key) {
            for (ProductType c : ProductType.values()) {
                if (c.getKey() == key) {
                    return c.value;
                }
            }
            return null;
        }

        public byte getKey() {
            return key;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 生成订单号
     *  32位以内，只能是数字、大小写字母_-|* 且唯一
     *  商品类型，时间戳（base62）
     *  支付类型 WN 微信扫码支付 WA 微信app支付 0 余额付款
     * @return 订单号
     */
    public static String tradeNo(String productType, String productCategory, String tradeType) {
        long now = new Date().getTime();
        String time = Base62.fromBase10(now);

        Random random = new Random();
        int randomNumInt = random.nextInt(1000);
        String randomNum = new DecimalFormat("000").format(randomNumInt);
        String tradeNo = prefix + tradeType + productType + productCategory + time + randomNum;
        return tradeNo;
    }


}
